|
ARD2
1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
|
00001 00018 #ifndef _HAL_H 00019 #define _HAL_H 00020 00021 /* 00022 ************************************************************** 00023 * Defines, Macros and Typedefs 00024 **************************************************************/ 00025 /*** Constant Macros ***/ 00026 /* Default Yes and No defines */ 00027 #ifndef TRUE 00028 #define TRUE (1u) 00029 #endif 00030 #ifndef CLEAR 00031 #define CLEAR (0u) 00032 #endif 00033 00034 #ifndef BITS_IN_BYTE 00035 #define BITS_IN_BYTE (8u) 00036 #endif 00037 #ifndef BYTES_IN_16 00038 #define BYTES_IN_16 (2u) 00039 #endif 00040 #ifndef BYTES_IN_32 00041 #define BYTES_IN_32 (4u) 00042 #endif 00043 #ifndef BIT_DEFINITION 00044 #define BIT_DEFINITION 00045 #define BIT0 (1u << 0u) 00046 #define BIT1 (1u << 1u) 00047 #define BIT2 (1u << 2u) 00048 #define BIT3 (1u << 3u) 00049 #define BIT4 (1u << 4u) 00050 #define BIT5 (1u << 5u) 00051 #define BIT6 (1u << 6u) 00052 #define BIT7 (1u << 7u) 00053 #define BIT8 (1u << 8u) 00054 #define BIT9 (1u << 9u) 00055 #define BIT10 (1u << 10) 00056 #define BIT11 (1u << 11) 00057 #define BIT12 (1u << 12) 00058 #define BIT13 (1u << 13) 00059 #define BIT14 (1u << 14) 00060 #define BIT15 (1u << 15) 00061 #define BIT16 (1u << 16) 00062 #define BIT17 (1u << 17) 00063 #define BIT18 (1u << 18) 00064 #define BIT19 (1u << 19) 00065 #define BIT20 (1u << 20) 00066 #define BIT21 (1u << 21) 00067 #define BIT22 (1u << 22) 00068 #define BIT23 (1u << 23) 00069 #define BIT24 (1u << 24) 00070 #define BIT25 (1u << 25) 00071 #define BIT26 (1u << 26) 00072 #define BIT27 (1u << 27) 00073 #define BIT28 (1u << 28) 00074 #define BIT29 (1u << 29) 00075 #define BIT30 (1u << 30) 00076 #define BIT31 (1u << 31) 00077 #endif 00078 00079 /* For interrupts */ 00080 #define ISR_MAX_PRIORITY (15u) 00081 #define ISR_UH_PRIORITY (14u) 00082 #define ISR_VH_PRIORITY (13u) 00083 #define ISR_HI_PRIORITY (12u) 00084 #define ISR_MED_HI_PRIORITY (11u) 00085 #define ISR_MED_PRIORITY (10u) 00086 #define ISR_MED_LO_PRIORITY (6u) 00087 #define ISR_LOW_PRIORITY (4u) 00088 #define ISR_VL_PRIORITY (3u) 00089 #define ISR_UL_PRIORITY (2u) 00090 #define ISR_MIN_PRIORITY (1u) 00091 #define ISR_INTC_PRIORITY (0u) 00092 00093 /* Isr mapping for upper layers */ 00094 #define CG147_WD2_ISR_CH SOFT_CONFIG_FLAG_4 00095 00096 /* Addresses */ 00097 #define RAM_BASE_ADDRESS (0x40000000u) 00098 00099 /* DMA Channels (not related to the scheduler) */ 00100 #define DEFAULT_ARRAY_COPY_CHANNEL (6u) 00101 00102 /* PIT Channels */ 00103 #define PIT_SCHEDULING_CH (0u) 00104 #define PIT_RESCHEDULE_CH (1u) 00105 #define PIT_CH_DELAY (3u) 00106 00107 /* Scheduler glue */ 00108 //#define TICK_PERIOD 0.00006225 /* Time in sec */ 00109 #define TICK_PERIOD 0.0001 /* Time in sec */ 00110 //#define TICK_PERIOD 0.000125 /* Time in sec */ 00111 //#define TICK_PERIOD 0.00025 /* Time in sec */ 00112 #define SCHED_100US_PERIOD ((uint32_t)(.0001 / TICK_PERIOD)) 00113 #define SCHED_500US_PERIOD ((uint32_t)(5u * SCHED_100US_PERIOD)) 00114 #define SCHED_TICK_PERIOD (uint32_t)(64000000 * TICK_PERIOD) 00115 #define RESCHED_TICK_PERIOD (uint32_t)(64000000 * .000035) 00116 00117 /* PIT default Time-outs for 64MHz signal */ 00118 #define PIT_1_SEC (64000000u) 00119 #define PIT_1_MSEC (64000u) 00120 00121 /* For special ADC Configurations */ 00122 #define ADC_TAKE_1_2V_READING ((uint8_t)0u) 00123 #define ADC_TAKE_TEMP_READING ((uint8_t)1u) 00124 00125 /* ADC sensitivities */ 00126 #define ADC_MAX_V (3300000) 00127 #define ADC_TEMP_OFFSET (1575000) 00128 #define ADC_TEMP_SENSITIVITY_PER_DEG (2400) 00129 #define ADC_SENSITIVITY (uint16_t)(ADC_MAX_V / BIT10) 00130 #define ADC_TEMP_OFFSET_CTS (BIT10 * ADC_TEMP_OFFSET / ADC_MAX_V) 00131 00132 /* ADC0 dedicated channels */ 00133 #define ADC_TO_AOUT_CH ADC_CH12 00134 00135 /* Special use DMAs */ 00136 #define ADC0_DMA_CH 8u 00137 #define ADC1_DMA_CH 9u 00138 00139 /* Special pins */ 00140 #ifdef USE_ARD2_V1 00141 #define PIN_EN_FL ('A'), ((uint8_t)2u) 00142 #define PIN_N_SYNC ('A'), ((uint8_t)5u) 00143 #define PIN_N_SYS_RES ('A'), ((uint8_t)15u) 00144 #define PIN_DSPI0_MISO ('C'), ((uint8_t)7u) 00145 #define PIN_DIS_AHP ('A'), ((uint8_t)7u) 00146 #define PIN_DIS_ALP ('A'), ((uint8_t)8u) 00147 #define PIN_DSPI0_SIN ('C'), ((uint8_t)7u) 00148 #define PIN_N_CS_MON ('C'), ((uint8_t)8u) 00149 #endif 00150 #ifdef USE_ARD2_V2 00151 #define PIN_EN_FL ('A'), ((uint8_t)6u) 00152 #define PIN_N_SYNC ('A'), ((uint8_t)5u) 00153 #define PIN_N_SYS_RES ('A'), ((uint8_t)15u) 00154 #define PIN_DSPI0_MISO ('C'), ((uint8_t)7u) 00155 #define PIN_DIS_AHP ('A'), ((uint8_t)7u) 00156 #define PIN_DIS_ALP ('A'), ((uint8_t)8u) 00157 #define PIN_DSPI0_SIN ('C'), ((uint8_t)7u) 00158 #define PIN_N_CS_MON ('C'), ((uint8_t)8u) 00159 #endif 00160 #ifdef USE_ARD2_V3 00161 #define PIN_EN_FL ('A'), ((uint8_t)6u) 00162 #define PIN_N_SYNC ('A'), ((uint8_t)5u) 00163 #define PIN_N_SYS_RES ('A'), ((uint8_t)15u) 00164 #define PIN_DSPI0_MISO ('C'), ((uint8_t)7u) 00165 #define PIN_DIS_AHP ('B'), ((uint8_t)14u) 00166 #define PIN_DIS_ALP ('B'), ((uint8_t)15u) 00167 #define PIN_DSPI0_SIN ('C'), ((uint8_t)7u) 00168 #define PIN_N_CS_MON ('C'), ((uint8_t)8u) 00169 #endif 00170 00171 /* Global 32-bit status errors */ 00172 #define STATUS_DATA_TRANSFER_ERROR BIT12 00173 #define STATUS_SCHEDULER_PROBLEM BIT28 00174 #define STATUS_SM_STATE_ALREADY_EXECUTING BIT30 00175 #define STATUS_SM_INVALID_PREVIOUS_STATE BIT31 00176 00177 /* Following defines address peripherals outside of the MCU */ 00178 #ifdef USE_ARD2_V1 00179 #define CG147_SPI_CONFIG DSPI0C4, BIT0 00180 #define CG147_SPI_CONFIG_EXT_1 DSPI0C6, BIT0 00181 #define CG147_SPI_CONFIG_EXT_2 DSPI0C7, BIT0 00182 #define CG147_SPI_CONFIG_EXT DSPI0C6, DSPI0C7, BIT0 00183 #define CG147_SPI_CONFIG_MONITORING DSPI0C4, (BIT0 | BIT6) 00184 #define CG147_SPI_CONFIG_EXT_MONITORING DSPI0C6, DSPI0C7, (BIT0 | BIT6) 00185 #define CG147_ADC_CONFIG ADC_MODULE_0, ADC_CH12 00186 #define MAIN_ACCELERO_SPI_CONFIG DSPI0C5, BIT3 00187 #define MIRANDA_SPI_CONFIG DSPI0C5, BIT2 00188 #endif 00189 #ifdef USE_ARD2_V2 00190 #define CG147_SPI_CONFIG DSPI0C4, BIT0 00191 #define CG147_SPI_CONFIG_EXT_1 DSPI0C6, BIT0 00192 #define CG147_SPI_CONFIG_EXT_2 DSPI0C7, BIT0 00193 #define CG147_SPI_CONFIG_EXT DSPI0C6, DSPI0C7, BIT0 00194 #define CG147_SPI_CONFIG_MONITORING DSPI0C4, (BIT0 | BIT6) 00195 #define CG147_SPI_CONFIG_EXT_MONITORING DSPI0C6, DSPI0C7, (BIT0 | BIT6) 00196 #define CG147_ADC_CONFIG ADC_MODULE_0, ADC_CH12 00197 #define MAIN_ACCELERO_SPI_CONFIG DSPI0C5, BIT5 00198 #define MIRANDA_SPI_CONFIG DSPI0C5, BIT2 00199 #endif 00200 #ifdef USE_ARD2_V3 00201 #define CG147_SPI_CONFIG DSPI0C4, BIT0 00202 #define CG147_SPI_CONFIG_EXT_1 DSPI0C6, BIT0 00203 #define CG147_SPI_CONFIG_EXT_2 DSPI0C7, BIT0 00204 #define CG147_SPI_CONFIG_EXT DSPI0C6, DSPI0C7, BIT0 00205 #define CG147_SPI_CONFIG_MONITORING DSPI0C4, (BIT0 | BIT6) 00206 #define CG147_SPI_CONFIG_EXT_MONITORING DSPI0C6, DSPI0C7, (BIT0 | BIT6) 00207 #define CG147_ADC_CONFIG ADC_MODULE_0, ADC_CH12 00208 #define MAIN_ACCELERO_SPI_CONFIG DSPI0C5, BIT5 00209 #define MIRANDA_SPI_CONFIG DSPI0C5, BIT4 00210 #endif 00211 /*** Function Macros ***/ 00212 #ifndef N_ELEMENTS 00213 #define N_ELEMENTS(X) (sizeof(X)/sizeof(*(X))) 00214 #endif 00215 /* Following can be used by drivers to clear ISR to them */ 00216 #ifndef CLEAR_ISR_FLAG 00217 #define CLEAR_ISR_FLAG(XX) INTC.SSCIR[XX].B.CLR = TRUE 00218 #endif 00219 00220 /* Preconfigured for delays */ 00221 #define DELAY_SEC(xx) u8fnDelay(PIT_1_SEC, (xx)) 00222 #define DELAY_MSEC(xx) u8fnDelay(PIT_1_MSEC, (xx)) 00223 00224 /*** Enums ***/ 00225 enum INTERRUPT_LIST 00226 { 00227 SOFT_CONFIG_FLAG_0 = 0, SOFT_CONFIG_FLAG_1, SOFT_CONFIG_FLAG_2, 00228 SOFT_CONFIG_FLAG_3, SOFT_CONFIG_FLAG_4, SOFT_CONFIG_FLAG_5, SOFT_CONFIG_FLAG_6, 00229 SOFT_CONFIG_FLAG_7, RESERVED_1, ECSM_INT, DMA_COMBINED_ERROR_INT, DMA_0_INT, 00230 DMA_1_INT, DMA_2_INT, DMA_3_INT, DMA_4_INT, DMA_5_INT, DMA_6_INT, DMA_7_INT, 00231 DMA_8_INT, DMA_9_INT, DMA_10_INT, DMA_11_INT, DMA_12_INT, DMA_13_INT, 00232 DMA_14_INT, DMA_15_INT, RESERVED_2, SOFT_WATCHDOG_INT, RESERVED_3, 00233 STM_CH0_INT, STM_CH1_INT, STM_CH2_INT, STM_CH3_INT, RESERVED_4, ECSM_RAM_INT1, 00234 ECSM_RAM_INT2, RESERVED_5, RESERVED_6, RESERVED_7, RESERVED_8, SIU_IRQ_0, 00235 SIU_IRQ_1, SIU_IRQ_2, SIU_IRQ_3, RESERVED_9, RESERVED_10, RESERVED_11, 00236 RESERVED_12, RESERVED_13, RESERVED_14, ME_SAFE_MODE_INT, 00237 ME_MODE_TRANSITION_INT, ME_INVALID_MODE_INT, ME_INVALID_CONFIG_INT, 00238 RESERVED_15, RESET_GENERATION_MODULE_INT, XOSC_INT, RESERVED_16, PIT_CH0_INT, 00239 PIT_CH1_INT, PIT_CH2_INT, ADC0_EOC_INT, ADC0_ER_INT, ADC0_WD_INT, CAN0_ESR_INT, 00240 CAN0_WARNING_INT, CAN0_ESR_WAK_INT, CAN0_BUF_00_03_INT, CAN0_BUF_04_07_INT, 00241 CAN0_BUF_08_11_INT, CAN0_BUF_12_15_INT, CAN0_BUF_16_31_INT, RESERVED_17, 00242 DSPI0_FUF_INT, DSPI0_EOQF_INT, DSPI0_TFFF_INT, DSPI0_TCF_INT, DSPI0_RFDF_INT, 00243 LIN0_RXI_INT, LIN0_TXI_INT, LIN0_ERR_INT, ADC1_EOC_INT, ADC1_ER_INT, 00244 ADC1_WD_INT, RESERVED_18, RESERVED_19, RESERVED_20, RESERVED_21, RESERVED_22, 00245 RESERVED_23, RESERVED_24, RESERVED_25, RESERVED_26, DSPI1_FUF_INT, 00246 DSPI1_EOQF_INT, DSPI1_TFFF_INT, DSPI1_TCF_INT, DSPI1_RFDF_INT, LIN1_RXI_INT, 00247 LIN1_TXI_INT, LIN1_ERR_INT, RESERVED_27, RESERVED_28, RESERVED_29, 00248 RESERVED_30, RESERVED_31, RESERVED_32, RESERVED_33, RESERVED_34, RESERVED_35, 00249 RESERVED_36, RESERVED_37, RESERVED_38, DSPI2_FUF_INT, DSPI2_EOQF_INT, 00250 DSPI2_TFFF_INT, DSPI2_TCF_INT, DSPI2_RFDF_INT, RESERVED_39, 00251 RESERVED_40, RESERVED_41, RESERVED_42, RESERVED_43, RESERVED_44, RESERVED_45, 00252 RESERVED_46, PIT_CH3_INT, RESERVED_47, RESERVED_48, RESERVED_49, RESERVED_50, 00253 RESERVED_51, FLEX_FNEAIF_INT, FLEX_FNEBIF_INT, FLEX_WUPIF_INT, FLEX_PRIF_INT, 00254 FLEX_CHIF_INT, FLEX_TBIF_INT, FLEX_RBIF_INT, FLEX_MIF_INT, RESERVED_52, 00255 RESERVED_53, RESERVED_54, RESERVED_55, RESERVED_56, RESERVED_57, RESERVED_58, 00256 RESERVED_59, RESERVED_60, RESERVED_61, RESERVED_62, RESERVED_63, RESERVED_64, 00257 RESERVED_65, RESERVED_66, RESERVED_67, TIMER0_TC0IR_INT, TIMER0_TC1IR_INT, 00258 TIMER0_TC2IR_INT, TIMER0_TC3IR_INT, TIMER0_TC4IR_INT, TIMER0_TC5IR_INT, 00259 RESERVED_68, RESERVED_69, TIMER0_WTIF_INT, RESERVED_70, TIMER0_RCF_INT, 00260 TIMER1_TC0IR_INT, TIMER1_TC1IR_INT, TIMER1_TC2IR_INT, TIMER1_TC3IR_INT, 00261 TIMER1_TC4IR_INT, TIMER1_TC5IR_INT, RESERVED_71, RESERVED_72, 00262 RESERVED_73, RESERVED_74, RESERVED_75, PWM0_RF0_INT, PWM0_COF0_INT, PWM0_CAF0_INT, 00263 PWM0_RF1_INT, PWM0_COF1_INT, PWM0_CAF1_INT, PWM0_RF2_INT, PWM0_COF2_INT, 00264 PWM0_CAF2_INT, PWM0_RF3_INT, PWM0_COF3_INT, PWM0_CAF3_INT, PWM0_FFLAG_INT, 00265 PWM0_REF_INT, CTU0_MRS_INT, CTU0_T0_INT, CTU0_T1_INT, CTU0_T2_INT, 00266 CTU0_T3_INT, CTU0_T4_INT, CTU0_T5_INT, CTU0_T6_INT, CTU0_T7_INT, 00267 CTU0_FIFO1_INT, CTU0_FIFO2_INT, CTU0_FIFO3_INT, CTU0_FIFO4_INT, CTU0_ADC_INT, 00268 CTU0_ERR_INT, FLEXCAN_ESR_INT, FLEXCAN_WARNING_INT, FLEXCAN_ESR_WAK_INT, 00269 FLEXCAN_BUF_00_03_INT, FLEXCAN_BUF_04_07_INT, FLEXCAN_BUF_08_11_INT, 00270 FLEXCAN_BUF_12_15_INT, FLEXCAN_BUF_16_31_INT, RESERVED_76, DSPI3_FUF_INT, 00271 DSPI3_EOQF_INT, DSPI3_TFFF_INT, DSPI3_TCF_INT, DSPI3_RFDF_INT 00272 }; 00273 enum INIT_ERRORS 00274 { 00275 PERIPHERALS_NOT_INITIALIZED = 1u, DEFAULT_OPERATION_MODES_NOT_LOADED, 00276 SWT_NOT_INITIALIZED, RUN_MODE_NOT_STARTED, PLL_ERROR 00277 }; 00278 enum DELAY_ERRORS 00279 { 00280 PIT_SELECTED_CH_DOESNT_EXIST = 1u, PIT_TIMER_NOT_RUNNING 00281 }; 00282 /*** TypeDefs ***/ 00283 /* Used to configure ISR */ 00284 #ifndef _INT_HANDLER_DECLARED 00285 #define _INT_HANDLER_DECLARED 00286 typedef void(*INTCInterruptFn)(void); 00287 00288 #endif 00289 00290 typedef struct 00291 { 00292 INTCInterruptFn pFn; 00293 uint16_t u16ISRVector; 00294 uint8_t u8Priority; 00295 } ISRConfig_t; 00296 00297 /* 00298 ************************************************************** 00299 * Declarations 00300 **************************************************************/ 00301 /*** Extern ***/ 00302 extern const uint32_t cu32ADCConfig; 00303 extern const uint32_t cau32FCUConfig[]; 00304 /*** Globals ***/ 00305 00306 /*** Static Globals ***/ 00307 00308 /* 00309 ************************************************************** 00310 * Function Prototypes 00311 **************************************************************/ 00312 /* 00313 ****************************************************************************** 00314 * 00315 * Function: u8fnMCUInit() 00316 * 00317 */ 00330 uint8_t u8fnMCUInit(void); 00331 /* 00332 ****************************************************************************** 00333 * 00334 * Function: u8fnInitPeripherals() 00335 * 00336 */ 00346 uint8_t u8fnInitPeripherals(void); 00347 /* 00348 ****************************************************************************** 00349 * 00350 * Function: u8fnInitInterrupts() 00351 * 00352 */ 00361 void vfnInitInterrupts(void); 00362 /* 00363 ****************************************************************************** 00364 * 00365 * Function: u8fnInitDSPI() 00366 * 00367 */ 00376 void vfnInitDSPI(void); 00377 /* 00378 ****************************************************************************** 00379 * 00380 * Function: vfnInitSCI() 00381 * 00382 */ 00390 void vfnInitSCI(void); 00391 /* 00392 ****************************************************************************** 00393 * 00394 * Function: vfnOutputPinInit() 00395 * 00396 */ 00404 void vfnOutputPinInit(void); 00405 /* 00406 ****************************************************************************** 00407 * 00408 * Function: vfnInputPadInit() 00409 * 00410 */ 00418 void vfnInputPadInit(void); 00419 /* 00420 ****************************************************************************** 00421 * 00422 * Function: vfnInitADC() 00423 * 00424 */ 00436 void vfnInitADC(void); 00437 /* 00438 ****************************************************************************** 00439 * 00440 * Function: u8fnDelay() 00441 * 00442 */ 00454 uint8_t u8fnDelay(const uint32_t cu32TimeBase, uint16_t u16Cycles); 00455 /* 00456 ****************************************************************************** 00457 * 00458 * Function: u8fnInitDMAMux() 00459 * 00460 */ 00468 void vfnInitDMAMux(uint8_t* pu8DMAMuxSettings, uint8_t u8Size); 00469 /* 00470 ****************************************************************************** 00471 * 00472 * Function: u8fnRawADCToDegreesCelsius() 00473 * 00474 */ 00481 uint8_t u8fnRawADCToDegreesCelsius(const uint16_t u16RawCounts); 00482 /* 00483 ****************************************************************************** 00484 * 00485 * Function: u8fnRawADCToOutput() 00486 * 00487 */ 00494 uint8_t u8fnRawADCToOutput(const uint16_t u16RawCounts); 00495 /* 00496 ****************************************************************************** 00497 * 00498 * Function: vfnLaunchFCU() 00499 * 00500 */ 00508 void vfnLaunchFCU(void); 00509 /* 00510 ****************************************************************************** 00511 * 00512 * Function: u8fnLaunchScheduler() 00513 * 00514 */ 00524 uint8_t u8fnLaunchScheduler(const uint8_t cu8Enable); 00525 /* 00526 ****************************************************************************** 00527 * 00528 * Function: u8fnInitPostalService() 00529 * 00530 */ 00541 uint8_t u8fnInitPostalService(const uint8_t cu8Enable); 00542 /* 00543 ****************************************************************************** 00544 * 00545 * Function: vfnTransferADCResults() 00546 * 00547 */ 00559 void vfnTransferADCResults(uint8_t u8Instance, uint16_t* pu16Destination, 00560 uint16_t u16Size); 00561 /* 00562 ****************************************************************************** 00563 * 00564 * Function: vfnEnterLowPowerMode() 00565 * 00566 */ 00573 void vfnEnterLowPowerMode(void); 00574 /* 00575 ****************************************************************************** 00576 * 00577 * Function: vfnDefaultISR() 00578 * 00579 */ 00586 static void vfnDefaultISR(void); 00587 00588 #endif /* _FILENAME_H */